Slack APIでメッセージにリアクションをしてみた(reactions.add)
こんにちは、CX事業本部の若槻です。
今回は、とあるChrome拡張を作りたく、Slack APIによるメッセージへのリアクション(スタンプの付与)の検証を行ってみました。
なお、APIを叩くSlack Appは前回の記事で作成したものを使用します。
どのAPIを使えば良いか
まず、Slackでメッセージへのリアクションを行うのにどのAPIを使えば良いかを確認します。
API Methods | slack apiページを見てみると、メッセージにリアクションをするにはreactions.add
メソッドを使えばよさそうです。
また、[reactions.add]ページを見ると、作成するAppのスコープはreactions:write
を指定すれば良さそうです。
Slack Appの設定
Slack APIを利用するにはSlack上にAppを作成する必要がありますが、記事冒頭で述べた通り今回は前回の記事で作成したAppを設定変更してメッセージへのリアクションも行えるようにします。
https://api.slack.com/apps にアクセスし、前回作成したApp(test-app
)を選択します。
[Basic Information]ページで画面左の[Features]欄より[OAuth & Permissions]を開きます。
[OAuth & Permissions]ページの[Scopes] - [User Token Scopes]で[Add an OAuth Scope]をクリックします。
プルダウンメニューで先ほど確認したスコープreactions:write
を選択します。
するとAppの再インストールを促されるので[reinstall your app]をクリックします。
するとAppが追加先のワークスペースへのアクセス権限をリクエストするので、[許可する]をクリックします。
Appを再インストールしても発行済みのOAuth Access Tokenは変更されないため同じ値を引き続き利用可能です。tokenの値は後ほど使用するので控えておきます。
これでSlack Appの設定は完了です。
APIでリアクションしてみる
次に、設定変更したAppを使って実際にAPIでメッセージへのリアクションをしてみます。
必要な情報を確認する
APIでリアクションを行う場合は、事前に以下の情報を確認する必要があります。
channel
:リアクションしたいメッセージがあるチャネルのIDname
:リアクションで貼りたいスタンプの名前timestamp
:リアクションしたいメッセージのタイムスタンプ
チャネルのIDは、対象のチャネルをブラウザで開いてURL末尾のパスの値で確認できます。(今回はC0XXXXXX
)
スタンプの名前は、私の以前の記事[Slack APIでメッセージにスタンプ(絵文字)を付けて投稿したい]を参考に確認できます。(今回はrimokai
)
メッセージのタイムスタンプは、Slackで対象のメッセージのタイムスタンプのリンクURLをコピーし、
取得したURL(今回はhttps://xxxxxxxx.slack.com/archives/C0XXXXXXX/p1592288435000900
)の末尾のパスの値からp
を省き、ミリ秒以下を.
区切りした値(今回は1592288435.000900
)となります。
これで必要な情報を確認できました。
SlackのTesterページの場合
SlackのTesterページからAPIを使ってみます。reactions.add
APIの場合は下記のページです。
ここまで取得した各種情報を指定し、[Test Method]によりAPIを実行すると、実際に叩かれたURLとレスポンス結果を確認できました。
rimokai
スタンプも付与することができました。
Node.jsの場合
以下のようなNode.jsで実行可能なスクリプトを作成しました。
var request = require('request'); var reaction_url = `https://slack.com/api/reactions.add?\ token=xoxp-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&\ channel=C0XXXXXXX&\ name=rimokai&\ timestamp=1592288435.000900`; var reaction_options = { uri: reaction_url, headers: { "Content-type": "application/json", }, json: {} }; request.post(reaction_options, function(error, response, body){});
Node.jsでスクリプトを実行すると、先ほどと同様にメッセージにrimokai
スタンプを付与することができました。
おわりに
Slack APIでメッセージにリアクション(スタンプの付与)をしてみました。
前回のSlack APIでメッセージの検索をしてみた(search.messages)のAPIと組み合わせれば「指定のメッセージを検索して自動でスタンプ付与」という処理を実装できそうです。
参考
- Node.js:JSONデータをPOSTする | Qiita
- Node.js で HTTP/HTTPS リクエスト を行う方法 | galife
- Node.jsでHTTP GETしてJSONパースするメモ | Qiita
- 【Node.js入門】https.get / requestによるJSONの取得・パース方法まとめ! | Samurai Blog
以上